#include <bits/stdc++.h>

#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;

template<class T> void chkmn(T &x, T y) { if (y < x) x = y; }
template<class T> void chkmx(T &x, T y) { if (y > x) x = y; }

using namespace std;

const int maxn = 1000010;
const int maxv = 1000000;

struct node {
  int L, R, ans;
  node() { L = -1e9, R = 1e9, ans = 1e9; }
  friend node operator+(node x, node y) {
    node res;
    res.ans = min(min(x.ans, y.ans), y.R - x.L);
    res.L = max(x.L, y.L), res.R = min(x.R, y.R);
    return res;
  }
} t[maxn << 2];

struct delpq {
  priority_queue<int> p, q;
  void ins(int x) { p.emplace(x); }
  void del(int x) { q.emplace(x); }
  bool empty() { while (!p.empty() && !q.empty() && p.top() == q.top()) p.pop(), q.pop(); return p.empty(); }
  int ask() { while (!p.empty() && !q.empty() && p.top() == q.top()) p.pop(), q.pop(); return p.top(); }
} Sl[maxn], Sr[maxn], L, R;

int n;

node get(int x) {
  node res;
  if (!Sl[x].empty()) res.R = -Sl[x].ask();
  if (!Sr[x].empty()) res.L = Sr[x].ask();
  return res;
}

#define mid ((l + r) >> 1)

void upd(int c, int l, int r, int x) {
  if (l == r) return t[c] = get(x), void();
  if (x <= mid) upd(c << 1, l, mid, x);
  else upd(c << 1 | 1, mid + 1, r, x);
  t[c] = t[c << 1] + t[c << 1 | 1];
}

#undef mid

int main() {
  freopen("stone.in", "r", stdin);
  freopen("stone.out", "w", stdout);
  cin.tie(nullptr) -> ios::sync_with_stdio(false);
  cin >> n;
  while (n--) {
    char op;
    int l, r;
    cin >> op >> l >> r, r--;
    if (op == 'A') {
      Sl[l].ins(-r), Sr[r].ins(l);
      upd(1, 1, maxv, l), upd(1, 1, maxv, r);
      L.ins(l), R.ins(-r);
    } else {
      Sl[l].del(-r), Sr[r].del(l);
      upd(1, 1, maxv, l), upd(1, 1, maxv, r);
      L.del(l), R.del(-r);
    }
    if (L.ask() > -R.ask()) {
      cout << t[1].ans + 1 << '\n';
    } else {
      int ml = L.ask(), mr = -R.ask();
      int cl = Sr[mr].ask(), cr = -Sl[ml].ask();
      cout << cr - cl + 1 << '\n';
    }
  }
}